package d8_proxy;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

/**
 * 2024/7/12  ProxyUtil Cjj
 */
public class ProxyUtil {
    public static Start createProxy(BigStar bigStar){
        /*ewProxyInstance(ClassLoader loader,
                Class<?>[] interfaces,
         (接口)  InvocationHandler h)
                 参数1：用于指定一个类加载器
                 参数2：指定生成的代理长什么样子,也就是有哪些方法
                 参数3：用来指定生成的代理对象要干什么事情
                */
        // Star starProxy =ProxyUtil.createProxy(s);
        //startProxy.sing("好日子") starProxy.dance()
        Start startProxy=(Start) Proxy.newProxyInstance(ProxyUtil.class.getClassLoader(),
                new Class[]{Start.class}, new InvocationHandler() {
                    @Override  //回调方法
                    public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
                       //代理对象要做的事情,会在这里写代码
                      if(method.getName().equals("sing")){
                          System.out.println("准备话筒,收钱20万");
                      }else if(method.getName().equals("dance")){
                          System.out.println("准备场地,收钱1000");

                      }
                      return method.invoke(bigStar,args);

                    }
                });
        return startProxy;
    }
}
